package com.zl.gmadmin.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zl.gmadmin.vo.dept.DeptVo;
import com.zl.gmadmin.entity.SysDept;
import com.zl.gmadmin.payload.DeptQueryCriteria;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * @author zhangliang
 * @version 1.0
 * @date 2021/2/20 17:17
 */
public interface SysDeptService extends IService<SysDept> {
    /**
     * 查询部门
     * @param criteria
     * @return
     */
    List<DeptVo> queryDepts(DeptQueryCriteria criteria);

    /**
     * 获取当前部门以及上级同级
     * @param ids
     * @return
     */
    List<DeptVo> supDepts(List<Long> ids);

    /**
     * 递归查询上级节点部门,只是一个工具方法
     * @param sysDept
     * @param sysDepts
     * @return
     */
    List<SysDept> supDepts(SysDept sysDept,List<SysDept> sysDepts);

    /**
     * 分页获取部门列表
     * @param criteria
     * @param page
     */
    Map<String,Object> selectPageVo(DeptQueryCriteria criteria, Page<SysDept> page);

    /**
     * 批量删除部门并验证部门是否有用户
     * @param ids
     */
    void removeByIdsAndVerification(List<Long> ids);

    /**
     * 根据部门pid获取当前同级部门最大排序号
     * @param pid
     * @return
     */
    Optional<Long> getSameLevelDeptMaxSort(Long pid);

    /**
     * 新增部门
     * @param sysDept
     */
    void saveDept(SysDept sysDept);

    /**
     * 更新部门信息
     * @param sysDept
     */
    void updateDept(SysDept sysDept);
}
